using System;
using System.Collections.Generic;
using System.Text;

namespace Sedodream.Sudoku.Board
{
	/// <summary>
	/// Interface to objects that represent a cell in the board
	/// </summary>
	public interface ICell
	{
		/// <summary>
		/// Gets the board data associated with this cell
		/// </summary>
		IBoard Board
		{
			get;
		}
		/// <summary>
		/// Gets the cell value associated with this cell.
		/// </summary>
		int? CellValue
		{
			get;
			set;
		}
		/// <summary>
		/// Gets the location of this cell on the board.
		/// </summary>
		IPoint Location
		{
			get;
		}
		/// <summary>
		/// Gets the cell complexity for solving.
		/// This is a number that represents how difficult this cell
		/// may be to solve.
		/// A value of 0 = forced value
		/// The higher the number the more difficult
		/// If this cell has a value this will return <c>int.MinValue</c>
		/// If this is not assigned the null is returned.
		/// </summary>
		int? CellComplexity
		{
			get;
			set;
		}
		/// <summary>
		/// Gets all the numbers that are allowed in this cell.
		/// If this cell is already populated then this will be
		/// null.
		/// </summary>
		IList<int> AllowedNumbers
		{
			get;
		}
		void Update();
	}
}
